package main

import (
	"flag"
	"fmt"
	"log"
	"os"
)

var config *Config

// 新增配置文件路径参数
var (
	serverConfigPath string
	routesPath       string
)

// 加载所有配置
func loadAllConfigs(serverConfigPath string, routesPath string) {
	// 加载服务器配置文件
	serverConfig, err := loadServerConfig(serverConfigPath)
	if err != nil {
		log.Fatalf("加载配置文件失败: %v", err)
		return
	}

	// 加载路由规则配置文件
	routes, err := loadRoutes(routesPath)
	if err != nil {
		log.Fatalf("加载路由规则失败: %v", err)
		return
	}

	config = &Config{
		ServerConfig: serverConfig.ServerConfig,
		ProxyConfig:  serverConfig.ProxyConfig,
		LogConfig:    serverConfig.LogConfig,
		Routes:       routes,
	}
}

// 统一日志输出
func main() {
	var uninstall bool

	// 设置命令行参数
	flag.BoolVar(&uninstall, "uninstall", false, "卸载程序")
	flag.StringVar(&serverConfigPath, "server-config", "", "指定服务器配置文件路径")
	flag.StringVar(&routesPath, "routes-config", "", "指定路由规则配置文件路径")
	flag.Parse()

	if uninstall {
		if err := performUninstall(); err != nil {
			fmt.Println("卸载失败:", err)
		}
		os.Exit(0)
	}
	// 传入参数调用配置加载
	loadAllConfigs(serverConfigPath, routesPath)

	// 初始化日志
	initLogger(config.LogConfig)

	// 防止后续空指针调用
	if logger == nil {
		log.Fatalf("日志系统未正确初始化")
	}
	// 根据配置决定是否设置开机自启
	checkAndSetupAutoStart()

	// 检查端口
	if !isPortAvailable(config.ServerConfig.Port) {
		logger.Fatalf("端口 %d 已被占用", config.ServerConfig.Port)
		return
	}

	// 启动http服务器
	initHttpServer()
}
